﻿// See https://aka.ms/new-console-template for more information
//委托的惰性
//因为委托的本质是一个类
//所以即使存在两个结构，功能完全相同的委托，却不能通用，因为委托本质是一个类
//因此，为了避免定义过多委托，使委托能够通用，微软为.net系统内置的两个委托，Action，Func

//Action 可有可无参数，一定没有返回值，最多可以有十六个参数，~~十六个泛型版本
//如果需要十七个参数的版本？手动扩展，自己把action添加一个泛型版本即可
//这是一个没有返回值的通用委托，如果所有的人需要使用没有返回值的委托的时候都使用这个委托，就可以统一委托类型，避免历史包袱
Action<int> action1 = new((int x) => { });
Action<int, string> action2 = new((int x, string y) => { });

//Func 最后一个泛型参数是返回值的委托
Func<int> func1 = new(() =>
{
    return 1;
});

Func<string, int> func2 = new((string par) =>
{
    return 1;
});

Console.WriteLine("Hello, World!");
